package example

import (
	"fmt"
	"io"
)

// 管道操作

func Case5() {
	fmt.Println("🎯管道操作")

	// 创建管道
	reader, writer := io.Pipe()

	// 启动goroutine写入数据
	go func() {
		defer writer.Close()

		data := []string{"数据1", "数据2", "数据3", "结束"}
		for _, item := range data {
			_, err := writer.Write([]byte(item + "\n"))
			if err != nil {
				fmt.Printf("写入错误: %v\n", err)
				return
			}
		}
	}()

	// 从管道读取数据
	buffer := make([]byte, 256)
	for {
		n, err := reader.Read(buffer)
		if err != nil {
			if err == io.EOF {
				fmt.Println("管道读取完成")
				break
			}
			fmt.Printf("读取错误: %v\n", err)
			break
		}
		fmt.Printf("从管道读取: %s", string(buffer[:n]))
	}

}
